Introduction

Our project investigates news headlines about women from many types of news sites in four different countries. Since much of the information we recieve daily about current events and popular culture comes from new sites, it is important to investigate any site-spanning tendencies or biases in the reporting about women. In this project, we examine four aspects of headlines about women: which words are most commonly used, how polarizing they are, and the typical bias of the sites and the average bias of all of a country’s sites. To provide more context and to give some concrete examples, we have included a graphic with a few headlines from the data set. This article is examining how does the representation of women in news headlines differ from the portrayal of other topics in headlines?

Data

For this project, we used data from The Pudding (we describe how they collected the data at the end). The data is composed of multiple datasets with different variables. One dataset contains information on the most common words, their frequency and their theme (crime and violence, empowerment, female stereotypes, people and places, race, ethnicity and identity, and no theme). Another dataset lists the headlines, which site published them, the country of the site, and the bias score for the headline. Other datasets included information on polarity of each site’s headlines about women and about all topics for the past 10 years, the average bias for each site.


The Words Used in Headlines

The Usage Frequency of the Words per Theme

Below is a bar graph that shows the cumulative frequency (how often a word appears accross all the headlines) of words in each theme. Each bar represents a different theme; the blocks within a bar represent the words that fall within each theme. The graph is interactive: you can view the word and its frequency that correspond to each block. This graph clearly shows that the words within the crime and violence theme are used the most frequently. We investigate the usage of specific words in this theme in the next graph.

Crime and Violence Words Displayed by Frequency

This plot reveals how frequently each word, within the theme of crime and violence, is used. ‘Kill’ is the most common word, occuring nearly 8000 times in the dataset.

A column chart that shows the frequency of words in the crime and violence theme in descending order with kill being used the most frequently and horror being used the least frequently.

Top Five Most Frequent Words per Theme

Here, we display the top 5 most frequently occuring words in each theme (in this plot we have included words with ‘no theme’). The word ‘man’ appears almost three times more frequently than the average frequency of all words.

A column chart that shows the top five words for each theme. Man, from no theme, is the word used most frequently.


Data by Country

Country Map

Data was taken from news sites from four different countries with varying numbers of news sources used. From the United States of America, 86 new sites were used. From the United Kingdom, 41 news sites were used. From South Africa, 23 news sites were used. From India, 36 news sites were used.

A world map that highlights the four countries that data was taken from; the USA, the UK, South Africa, and India.

Bias Score by Country

The following column chart displays the mean bias by country along with the maximum bias of a headline published by a site in the country. The minimum bias score is zero for all countries so no visual representation was added. The UK has the highest average bias as well as the highest maximum bias.

A column chart that shows the average bias score of headlines by country along with the maximum bias score from the country.


The Polarity of Headlines

Polarity over Time

In this graph, we visualize how the polarity of headlines has changed over the past ten years. The polarity scores represent how sensationalized a headline is. Sensational headlines sacrifice accuracy in an attempt to provoke an emotional response from readers. They are designed to generate interest through emotional manipulation. In general, the polarity of news headlines about women is higher than the polarity for other headlines. In the past ten years, polarity has increased, and the gap between the polarity of headlines about women and the polarity of general headlines has widened.

An animated line graph that shows the bias over time for headlines about women and headlines about other topics. The bias for headlines about women has consistently been higher.

Polarity of News Sites

In the graph below, the difference in the average polarity score between headlines about women and other headlines are shown for each site. The sites are ordered by the largest average polarity of headlines about women. Almost every site’s headlines about women are more polarizing than their headlines about other topics.

A chart that shows the difference in polarity for all news sites that data was taken from. Most of the sites have a higher polarity in regards to headlines about women compared to headlines about other topics. The daily sun has by far the largest difference in polarity of its headlines.


Headline Examples

Below we show a few more examples of headlines along with their site, country and bias score. The first table shows a subset of the least biased headlines about women, and the second table show a few of the most biased headlines.

Least Biased Headline Examples
Headline Site Country Bias
'Lady Bird' buzzes through young sexuality iol.co.za South Africa 0
American Woman, Divorced From Saudi Husband, Is Trapped in Saudi Arabia msn.com India 0
'SA poorer without her' SACP reacts to Madikizela Mandela's death News24.com South Africa 0
Most Biased Headline Examples
Headline Site Country Bias
Girl with severe eczema told her mum she 'didn't want to look at herself in the mirror' she's now a model manchestereveningnews.co.uk UK 1.000
A Mother Said Her 9 Year Old Daughter Killed Herself Because She Was Bullied For Being Friends With A White Boy buzzfeed.com UK 0.833
Woman reunited with her long lost brother reveals surprise as she discovers she's now her SISTER dailyrecord.co.uk UK 0.833

More Information About the Data

Data Calculations

Polarity Calculations: The Pudding measured polarity by using a package in python which measured the sentiment (negative to positive) of each headline (a score from -1 to 1). The polarity is the absolute value of these scores.

Bias Calculations: The Pudding measured gender bias in two steps. First, they checked if the headline used gendered language (‘she’, ‘bride’, ‘daughter’, …). If it did, they counted the number of words that are stereotypes about women (‘weak’, ‘sexy’, ‘emotional’, …). Then, they normalized this count so each site had a score between 0 and 1.

Original Article

https://pudding.cool/2022/02/women-in-headlines/

LS0tCnRpdGxlOiAiSGVhZGxpbmVzIFdyaXR0ZW4gQWJvdXQgV29tZW4iCmF1dGhvcjoKLSBuYW1lOiAiQXVkcmV5IFNteWN6ZWsiCi0gbmFtZTogIkVsbGVyeSBJc2xhbmQiCmRhdGU6ICI0LzI4LzIwMjIiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBkZl9wcmludDogcGFnZWQKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyIGxpYnJhcmllcywgZWNobz1GQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkgICAgICMgZm9yIGdyYXBoaW5nIGFuZCBkYXRhIGNsZWFuaW5nCmxpYnJhcnkobHVicmlkYXRlKSAgICAgIyBmb3IgZGF0ZSBtYW5pcHVsYXRpb24KbGlicmFyeShnZ3RoZW1lcykgICAgICAjIGZvciBldmVuIG1vcmUgcGxvdHRpbmcgdGhlbWVzCmxpYnJhcnkoZ2dhbmltYXRlKSAgICAgIyBmb3IgYWRkaW5nIGFuaW1hdGlvbiBsYXllcnMgdG8gZ2dwbG90cwpsaWJyYXJ5KFJDb2xvckJyZXdlcikgICMgZm9yIGNvbG9yIHBhbGV0dGVzCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShwbG90bHkpICAgICAgICAjIGZvciB0aGUgZ2dwbG90bHkoKSAtIGJhc2ljIGludGVyYWN0aXZpdHkKbGlicmFyeShnZ2FuaW1hdGUpICAgICAjIGZvciBhZGRpbmcgYW5pbWF0aW9uIGxheWVycyB0byBnZ3Bsb3RzCmxpYnJhcnkodHJhbnNmb3JtcikgICAgIyBmb3IgInR3ZWVuaW5nIiAoZ2dhbmltYXRlKQpsaWJyYXJ5KGdpZnNraSkgICAgICAgICMgbmVlZCB0aGUgbGlicmFyeSBmb3IgY3JlYXRpbmcgZ2lmcyBidXQgZG9uJ3QgbmVlZCB0byBsb2FkIGVhY2ggdGltZQpsaWJyYXJ5KGd0KQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoZ2dtYXApCnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpICMgTXkgZmF2b3JpdGUgZ2dwbG90KCkgdGhlbWUgOikKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgIHdhcm5pbmcgPSBGQUxTRSwgcmVzdWx0cz1GQUxTRSwgY29tbWVudD1GQUxTRX0KZnJlcV90aGVtZV93b3JkcyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy93b3JkX3RoZW1lc19mcmVxLmNzdiIpCmZyZXFfY291bnRyeV93b3JkcyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy93b3JkX2NvdW50cnlfZnJlcS5jc3YiKQpoZWFkbGluZV9zaXRlIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL2hlYWRsaW5lc19zaXRlLmNzdiIpCndvcmRfdGhlbWVfcmFuayA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy93b3JkX3RoZW1lc19yYW5rLmNzdiIpCmhlYWRsaW5lX2V4YW1wbGVzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL2hlYWRsaW5lcy5jc3YiKQpwb2xhcml0eV9zaXRlIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3BvbGFyaXR5X2NvbXBhcmlzb25fc2l0ZV9jb3VudHJ5X3RpbWUuY3N2IikKcG9sYXJpdHlfb3Zlcl90aW1lIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3BvbGFyaXR5X2NvbXBhcmlzb25fY291bnRyeV90aW1lLmNzdiIpCmBgYAoKCmBgYHtyLCBlY2hvID0gRkFMU0V9CnBpdm90X2NvdW50cnlfd29yZCA8LSBmcmVxX2NvdW50cnlfd29yZHMgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gLWNvdW50cnksCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIndvcmQiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAibnVtYmVyIikgJT4lIAogIGZpbHRlcih3b3JkICE9ICJYIikgJT4lIAogIG5hLm9taXQoKQpgYGAKCiMjIEludHJvZHVjdGlvbgoKIyMjIyBPdXIgcHJvamVjdCBpbnZlc3RpZ2F0ZXMgbmV3cyBoZWFkbGluZXMgYWJvdXQgd29tZW4gZnJvbSBtYW55IHR5cGVzIG9mIG5ld3Mgc2l0ZXMgaW4gZm91ciBkaWZmZXJlbnQgY291bnRyaWVzLiBTaW5jZSBtdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSByZWNpZXZlIGRhaWx5IGFib3V0IGN1cnJlbnQgZXZlbnRzIGFuZCBwb3B1bGFyIGN1bHR1cmUgY29tZXMgZnJvbSBuZXcgc2l0ZXMsIGl0IGlzIGltcG9ydGFudCB0byBpbnZlc3RpZ2F0ZSBhbnkgc2l0ZS1zcGFubmluZyB0ZW5kZW5jaWVzIG9yIGJpYXNlcyBpbiB0aGUgcmVwb3J0aW5nIGFib3V0IHdvbWVuLiBJbiB0aGlzIHByb2plY3QsIHdlIGV4YW1pbmUgZm91ciBhc3BlY3RzIG9mIGhlYWRsaW5lcyBhYm91dCB3b21lbjogd2hpY2ggd29yZHMgYXJlIG1vc3QgY29tbW9ubHkgdXNlZCwgaG93IHBvbGFyaXppbmcgdGhleSBhcmUsIGFuZCB0aGUgdHlwaWNhbCBiaWFzIG9mIHRoZSBzaXRlcyBhbmQgdGhlIGF2ZXJhZ2UgYmlhcyBvZiBhbGwgb2YgYSBjb3VudHJ5J3Mgc2l0ZXMuIFRvIHByb3ZpZGUgbW9yZSBjb250ZXh0IGFuZCB0byBnaXZlIHNvbWUgY29uY3JldGUgZXhhbXBsZXMsIHdlIGhhdmUgaW5jbHVkZWQgYSBncmFwaGljIHdpdGggYSBmZXcgaGVhZGxpbmVzIGZyb20gdGhlIGRhdGEgc2V0LiBUaGlzIGFydGljbGUgaXMgZXhhbWluaW5nIGhvdyBkb2VzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB3b21lbiBpbiBuZXdzIGhlYWRsaW5lcyBkaWZmZXIgZnJvbSB0aGUgcG9ydHJheWFsIG9mIG90aGVyIHRvcGljcyBpbiBoZWFkbGluZXM/IFxuCgohW10oaGVhZGxpbmVzX2dyYXBoaWMuanBnKQoKIyMgRGF0YQoKIyMjIyBGb3IgdGhpcyBwcm9qZWN0LCB3ZSB1c2VkIGRhdGEgZnJvbSBUaGUgUHVkZGluZyAod2UgZGVzY3JpYmUgaG93IHRoZXkgY29sbGVjdGVkIHRoZSBkYXRhIGF0IHRoZSBlbmQpLiBUaGUgZGF0YSBpcyBjb21wb3NlZCBvZiBtdWx0aXBsZSBkYXRhc2V0cyB3aXRoIGRpZmZlcmVudCB2YXJpYWJsZXMuIE9uZSBkYXRhc2V0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBtb3N0IGNvbW1vbiB3b3JkcywgdGhlaXIgZnJlcXVlbmN5IGFuZCB0aGVpciB0aGVtZSAoY3JpbWUgYW5kIHZpb2xlbmNlLCBlbXBvd2VybWVudCwgZmVtYWxlIHN0ZXJlb3R5cGVzLCBwZW9wbGUgYW5kIHBsYWNlcywgcmFjZSwgZXRobmljaXR5IGFuZCBpZGVudGl0eSwgYW5kIG5vIHRoZW1lKS4gQW5vdGhlciBkYXRhc2V0IGxpc3RzIHRoZSBoZWFkbGluZXMsIHdoaWNoIHNpdGUgcHVibGlzaGVkIHRoZW0sIHRoZSBjb3VudHJ5IG9mIHRoZSBzaXRlLCBhbmQgdGhlIGJpYXMgc2NvcmUgZm9yIHRoZSBoZWFkbGluZS4gT3RoZXIgZGF0YXNldHMgaW5jbHVkZWQgaW5mb3JtYXRpb24gb24gcG9sYXJpdHkgb2YgZWFjaCBzaXRlJ3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFuZCBhYm91dCBhbGwgdG9waWNzIGZvciB0aGUgcGFzdCAxMCB5ZWFycywgdGhlIGF2ZXJhZ2UgYmlhcyBmb3IgZWFjaCBzaXRlLiAKXG4KCioqKgoKCiMjIFRoZSBXb3JkcyBVc2VkIGluIEhlYWRsaW5lcwpcbgoKCiMjIyBUaGUgVXNhZ2UgRnJlcXVlbmN5IG9mIHRoZSBXb3JkcyBwZXIgVGhlbWUgClxuCgojIyMjIyBCZWxvdyBpcyBhIGJhciBncmFwaCB0aGF0IHNob3dzIHRoZSBjdW11bGF0aXZlIGZyZXF1ZW5jeSAoaG93IG9mdGVuIGEgd29yZCBhcHBlYXJzIGFjY3Jvc3MgYWxsIHRoZSBoZWFkbGluZXMpIG9mIHdvcmRzIGluIGVhY2ggdGhlbWUuIEVhY2ggYmFyIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgdGhlbWU7IHRoZSBibG9ja3Mgd2l0aGluIGEgYmFyIHJlcHJlc2VudCB0aGUgd29yZHMgdGhhdCBmYWxsIHdpdGhpbiBlYWNoIHRoZW1lLiBUaGUgZ3JhcGggaXMgaW50ZXJhY3RpdmU6IHlvdSBjYW4gdmlldyB0aGUgd29yZCBhbmQgaXRzIGZyZXF1ZW5jeSB0aGF0IGNvcnJlc3BvbmQgdG8gZWFjaCBibG9jay4gVGhpcyBncmFwaCBjbGVhcmx5IHNob3dzIHRoYXQgdGhlIHdvcmRzIHdpdGhpbiB0aGUgY3JpbWUgYW5kIHZpb2xlbmNlIHRoZW1lIGFyZSB1c2VkIHRoZSBtb3N0IGZyZXF1ZW50bHkuIFdlIGludmVzdGlnYXRlIHRoZSB1c2FnZSBvZiBzcGVjaWZpYyB3b3JkcyBpbiB0aGlzIHRoZW1lIGluIHRoZSBuZXh0IGdyYXBoLgpcbgoKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9IDgsIGZpZy5oZWlnaHQ9NiwgZmlnLmFsdD0gIkJhciBHcmFwaCBzaG93aW5nIHRoZSBjdW11bGF0aXZlIGZyZXF1ZW5jeSBvZiB3b3JkcyBzb3J0ZWQgYnkgdGhlbWUuIFRoZSBjcmltZSBhbmQgdmlvbGVuY2UgaGFzIHRoZSBtb3N0IGZyZXF1ZW50IHVzZS4gVGhlIGdyYXBoIGlzIGludGVyYWN0aXZlIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VlIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBlYWNoIHdvcmQgaW4gdGhlIHRoZW1lLiJ9CnBpdm90X3dvcmRzIDwtIGZyZXFfdGhlbWVfd29yZHMgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gLXRoZW1lLAogICAgICAgICAgICAgICBuYW1lc190byA9ICJ3b3JkIiwKICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gImZyZXEiKSAlPiUgCiAgbmEub21pdCgpCgp3b3JkX3Bsb3QgPC0gcGl2b3Rfd29yZHMgJT4lCiAgI211dGF0ZSh3b3JkID0gZmN0X2luZnJlcSh3b3JkKSklPiUKICBmaWx0ZXIodGhlbWUgIT0gIk5vIHRoZW1lIikgJT4lIAogIGdncGxvdChhZXMoeCA9IGZjdF9yZW9yZGVyKHRoZW1lLCBkZXNjKGZyZXEpLCBzdW0pLCAKICAgICAgICAgICAgIHkgPSBmcmVxLCAKICAgICAgICAgICAgIGZpbGwgPSBmY3RfcmVvcmRlcih0aGVtZSwgd29yZCksCiAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUoIndvcmQ6Iiwgd29yZCkpKSArCiAgICBnZW9tX2NvbChjb2xvciA9ICJncmF5MjYiLCBzaXplID0gLjEpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImxpZ2h0c2t5Ymx1ZTIiLCAiY29ybmZsb3dlcmJsdWUiLCAic2xhdGVibHVlMSIsICJtZWRpdW1wdXJwbGUyIiwgIiNjMWEwZmEiKSkgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICBsYWJzKHRpdGxlID0gIkN1bXVsYXRpdmUgRnJlcXVlbmN5IG9mIFdvcmRzIERlc2NyaWJpbmcgV29tZW4gaW4gSGVhZGxpbmVzIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiRnJlcXVlbmN5IikrCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSkKCgpnZ3Bsb3RseSh3b3JkX3Bsb3QsCiAgICAgICAgIHRvb2x0aXAgPSBjKCJ5IiwgInRleHQiKSkKYGBgCgoKIyMjIENyaW1lIGFuZCBWaW9sZW5jZSBXb3JkcyBEaXNwbGF5ZWQgYnkgRnJlcXVlbmN5ClxuCiMjIyMgVGhpcyBwbG90IHJldmVhbHMgaG93IGZyZXF1ZW50bHkgZWFjaCB3b3JkLCB3aXRoaW4gdGhlIHRoZW1lIG9mIGNyaW1lIGFuZCB2aW9sZW5jZSwgaXMgdXNlZC4gJ0tpbGwnIGlzIHRoZSBtb3N0IGNvbW1vbiB3b3JkLCBvY2N1cmluZyBuZWFybHkgODAwMCB0aW1lcyBpbiB0aGUgZGF0YXNldC4gCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPSA4LCBmaWcuaGVpZ2h0PTYsIGZpZy5hbHQ9ICJBIGNvbHVtbiBjaGFydCB0aGF0IHNob3dzIHRoZSBmcmVxdWVuY3kgb2Ygd29yZHMgaW4gdGhlIGNyaW1lIGFuZCB2aW9sZW5jZSB0aGVtZSBpbiBkZXNjZW5kaW5nIG9yZGVyIHdpdGgga2lsbCBiZWluZyB1c2VkIHRoZSBtb3N0IGZyZXF1ZW50bHkgYW5kIGhvcnJvciBiZWluZyB1c2VkIHRoZSBsZWFzdCBmcmVxdWVudGx5LiJ9CgpwaXZvdF93b3JkcyAlPiUgCiAgZmlsdGVyKHRoZW1lID09ICJjcmltZSBhbmQgdmlvbGVuY2UiKSAlPiUgCiAgZ2dwbG90KGFlcyh5ID0gZmN0X3Jlb3JkZXIod29yZCwgZnJlcSksIHggPSBmcmVxKSkgKwogICAgZ2VvbV9jb2woZmlsbCA9ICJtZWRpdW1wdXJwbGUyIikrCiAgICBmYWNldF93cmFwKH50aGVtZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICAgIGxhYnMoeSA9IE5VTEwsIHggPSBOVUxMLCBmaWxsID0gTlVMTCkgKwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnkgPSBlbGVtZW50X2JsYW5rKCkpKwogIGxhYnModGl0bGUgPSAiIiwKICAgICAgIHN1YnRpdGxlID0gIiIpCmBgYAoKIyMjIFRvcCBGaXZlIE1vc3QgRnJlcXVlbnQgV29yZHMgcGVyIFRoZW1lCiMjIyMgSGVyZSwgd2UgZGlzcGxheSB0aGUgdG9wIDUgbW9zdCBmcmVxdWVudGx5IG9jY3VyaW5nIHdvcmRzIGluIGVhY2ggdGhlbWUgKGluIHRoaXMgcGxvdCB3ZSBoYXZlIGluY2x1ZGVkIHdvcmRzIHdpdGggJ25vIHRoZW1lJykuIFRoZSB3b3JkICdtYW4nIGFwcGVhcnMgYWxtb3N0IHRocmVlIHRpbWVzIG1vcmUgZnJlcXVlbnRseSB0aGFuIHRoZSBhdmVyYWdlIGZyZXF1ZW5jeSBvZiBhbGwgd29yZHMuICAKXG4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gNiwgZmlnLmFsdD0gIkEgY29sdW1uIGNoYXJ0IHRoYXQgc2hvd3MgdGhlIHRvcCBmaXZlIHdvcmRzIGZvciBlYWNoIHRoZW1lLiBNYW4sIGZyb20gbm8gdGhlbWUsIGlzIHRoZSB3b3JkIHVzZWQgbW9zdCBmcmVxdWVudGx5LiJ9CndvcmRfdGhlbWVfcmFuayAlPiUgCiAgZmlsdGVyKGByYW5rYCA8IDYpICU+JSAKICBzZWxlY3QoIWBYYCkgJT4lIAogIGdncGxvdChhZXMoeSA9IGZjdF9yZW9yZGVyKHdvcmQsIHRoZW1lKSwgeCA9IGNvdW50KSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdGhlbWUpKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJsaWdodHNreWJsdWUyIiwgImNvcm5mbG93ZXJibHVlIiwgInNsYXRlYmx1ZTEiLCAibWVkaXVtcHVycGxlMiIsICIjYzFhMGZhIiwgIiNkY2EwZmEiKSkgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIiIpICsKICAgICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnkgPSBlbGVtZW50X2JsYW5rKCkpCiAgCmBgYAoKKioqIAoKIyMgRGF0YSBieSBDb3VudHJ5ClxuCgojIyMgQ291bnRyeSBNYXAKXG4KCiMjIyMjIERhdGEgd2FzIHRha2VuIGZyb20gbmV3cyBzaXRlcyBmcm9tIGZvdXIgZGlmZmVyZW50IGNvdW50cmllcyB3aXRoIHZhcnlpbmcgbnVtYmVycyBvZiBuZXdzIHNvdXJjZXMgdXNlZC4gRnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCA4NiBuZXcgc2l0ZXMgd2VyZSB1c2VkLiBGcm9tIHRoZSBVbml0ZWQgS2luZ2RvbSwgNDEgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIEZyb20gU291dGggQWZyaWNhLCAyMyBuZXdzIHNpdGVzIHdlcmUgdXNlZC4gRnJvbSBJbmRpYSwgMzYgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIApcbgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgZmlnLmFsdD0gIkEgd29ybGQgbWFwIHRoYXQgaGlnaGxpZ2h0cyB0aGUgZm91ciBjb3VudHJpZXMgdGhhdCBkYXRhIHdhcyB0YWtlbiBmcm9tOyB0aGUgVVNBLCB0aGUgVUssIFNvdXRoIEFmcmljYSwgYW5kIEluZGlhLiJ9CndvcmxkX21hcCA8LSBtYXBfZGF0YSgid29ybGQiKQoKaGVhZGxpbmVfc2l0ZSAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeV9vZl9wdWIpICU+JSAKICBzdW1tYXJpc2UoYmlhc19jb3VudHJ5ID0gbWVhbihiaWFzKSkgJT4lIAogIGdncGxvdCgpICsKICAgIGdlb21fbWFwKGRhdGEgPSB3b3JsZF9tYXAsIG1hcCA9IHdvcmxkX21hcCwKICAgICAgICAgICAgIGFlcyhsb25nLCBsYXQsIG1hcF9pZCA9IHJlZ2lvbiksCiAgICAgICAgICAgICBmaWxsID0gIiNlN2RlZmEiKSsKICAgIGdlb21fbWFwKG1hcCA9IHdvcmxkX21hcCwKICAgICAgICAgICAgYWVzKG1hcF9pZCA9IGBjb3VudHJ5X29mX3B1YmApLAogICAgICAgICAgICBmaWxsID0gIm1lZGl1bXB1cnBsZTIiLAogICAgICAgICAgICBjb2xvciA9ICJtZWRpdW1wdXJwbGUyIikrCiAgICBleHBhbmRfbGltaXRzKHggPSB3b3JsZF9tYXAkbG9uZywgeSA9IHdvcmxkX21hcCRsYXQpICsgCiAgICB0aGVtZV9tYXAoKQpgYGAKCiMjIyBCaWFzIFNjb3JlIGJ5IENvdW50cnkKXG4KIyMjIyMgVGhlIGZvbGxvd2luZyBjb2x1bW4gY2hhcnQgZGlzcGxheXMgdGhlIG1lYW4gYmlhcyBieSBjb3VudHJ5IGFsb25nIHdpdGggdGhlIG1heGltdW0gYmlhcyBvZiBhIGhlYWRsaW5lIHB1Ymxpc2hlZCBieSBhIHNpdGUgaW4gdGhlIGNvdW50cnkuIFRoZSBtaW5pbXVtIGJpYXMgc2NvcmUgaXMgemVybyBmb3IgYWxsIGNvdW50cmllcyBzbyBubyB2aXN1YWwgcmVwcmVzZW50YXRpb24gd2FzIGFkZGVkLiBUaGUgVUsgaGFzIHRoZSBoaWdoZXN0IGF2ZXJhZ2UgYmlhcyBhcyB3ZWxsIGFzIHRoZSBoaWdoZXN0IG1heGltdW0gYmlhcy4KXG4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuYWx0PSAiQSBjb2x1bW4gY2hhcnQgdGhhdCBzaG93cyB0aGUgYXZlcmFnZSBiaWFzIHNjb3JlIG9mIGhlYWRsaW5lcyBieSBjb3VudHJ5IGFsb25nIHdpdGggdGhlIG1heGltdW0gYmlhcyBzY29yZSBmcm9tIHRoZSBjb3VudHJ5LiJ9CmhlYWRsaW5lX3NpdGUgJT4lCiAgZ3JvdXBfYnkoY291bnRyeV9vZl9wdWIpICU+JQogIHN1bW1hcml6ZShtZWFuX2JpYXMgPSBtZWFuKGJpYXMpLCBtYXhfYmlhcyA9IG1heChiaWFzKSkgJT4lIAogIGdncGxvdCgpKwogIGdlb21fY29sKGFlcyh5ID0gY291bnRyeV9vZl9wdWIsIHggPSBtYXhfYmlhcyksIAogICAgICAgICAgIGZpbGwgPSAiI2U3ZGVmYSIsIHdpZHRoID0gLjc1KSsKICBnZW9tX2NvbChhZXMoeSA9IGNvdW50cnlfb2ZfcHViLCB4ID0gbWVhbl9iaWFzKSwgCiAgICAgICAgICAgd2lkdGggPSAuNSwgZmlsbCA9ICJtZWRpdW1wdXJwbGUyIikrCiAgZ2VvbV90ZXh0KGFlcyh5PSBjb3VudHJ5X29mX3B1YiwgeCA9IG1lYW5fYmlhcywgbGFiZWwgPSByb3VuZChtZWFuX2JpYXMsIDMpKSwKICAgICAgICAgICAgY29sb3IgPSAibWVkaXVtcHVycGxlMiIsCiAgICAgICAgICAgIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSkrCiAgZ2VvbV90ZXh0KGFlcyh5PSBjb3VudHJ5X29mX3B1YiwgeCA9IG1heF9iaWFzLCBsYWJlbCA9IHJvdW5kKG1heF9iaWFzLCAzKSksCiAgICAgICAgICAgIGNvbG9yID0gIiNjMWEwZmEiLAogICAgICAgICAgICBoanVzdCA9IC0wLjIsIHNpemUgPSAzLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMSkpKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpKSsKICBsYWJzKHRpdGxlID0gIkF2ZXJhZ2UgYW5kIE1heGltdW0gQmlhcyBTY29yZSBieSBDb3VudHJ5IiwKICAgICAgIHggPSBOVUxMLAogICAgICAgeSA9ICIiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgoqKioKCiMjIFRoZSBQb2xhcml0eSBvZiBIZWFkbGluZXMKXG4KCiMjIyBQb2xhcml0eSBvdmVyIFRpbWUKXG4KIyMjIyMgSW4gdGhpcyBncmFwaCwgd2UgdmlzdWFsaXplIGhvdyB0aGUgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGhhcyBjaGFuZ2VkIG92ZXIgdGhlIHBhc3QgdGVuIHllYXJzLiBUaGUgcG9sYXJpdHkgc2NvcmVzIHJlcHJlc2VudCBob3cgc2Vuc2F0aW9uYWxpemVkIGEgaGVhZGxpbmUgaXMuIFNlbnNhdGlvbmFsIGhlYWRsaW5lcyBzYWNyaWZpY2UgYWNjdXJhY3kgaW4gYW4gYXR0ZW1wdCB0byBwcm92b2tlIGFuIGVtb3Rpb25hbCByZXNwb25zZSBmcm9tIHJlYWRlcnMuIFRoZXkgYXJlIGRlc2lnbmVkIHRvIGdlbmVyYXRlIGludGVyZXN0IHRocm91Z2ggZW1vdGlvbmFsIG1hbmlwdWxhdGlvbi4gSW4gZ2VuZXJhbCwgdGhlIHBvbGFyaXR5IG9mIG5ld3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGlzIGhpZ2hlciB0aGFuIHRoZSBwb2xhcml0eSBmb3Igb3RoZXIgaGVhZGxpbmVzLiBJbiB0aGUgcGFzdCB0ZW4geWVhcnMsIHBvbGFyaXR5IGhhcyBpbmNyZWFzZWQsIGFuZCB0aGUgZ2FwIGJldHdlZW4gdGhlIHBvbGFyaXR5IG9mIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhbmQgdGhlIHBvbGFyaXR5IG9mIGdlbmVyYWwgaGVhZGxpbmVzIGhhcyB3aWRlbmVkLgpcbgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnBvbGFyaXR5X3RpbWVfYW5pbSA8LSBwb2xhcml0eV9vdmVyX3RpbWUgJT4lIAogIGdyb3VwX2J5KGB5ZWFyYCkgJT4lIAogIHN1bW1hcmlzZSh3b21lbl9tZWFuID0gbWVhbihgd29tZW5fcG9sYXJpdHlfbWVhbmApLAogICAgICAgICAgICBhbGxfbWVhbiA9IG1lYW4oYGFsbF9wb2xhcml0eV9tZWFuYCksCiAgICAgICAgICAgIHllYXIpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIGdncGxvdCgpKwogIGdlb21fbGluZShhZXMoeD1geWVhcmAsIHk9YHdvbWVuX21lYW5gKSwgY29sb3IgPSAibWVkaXVtcHVycGxlMiIsIHNlID0gRkFMU0UpKwogIGdlb21fbGluZShhZXMoeD1geWVhcmAsIHk9YGFsbF9tZWFuYCksIGNvbG9yID0gImJsYWNrIiwgc2UgPSBGQUxTRSkrCiAgZ2VvbV9wb2ludChhZXMoeD1geWVhcmAsIHk9YHdvbWVuX21lYW5gKSwKICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjYzJiMWUzIiwKICAgICAgICAgICAgIHNpemUgPSA1LCBzdHJva2UgPSAyLCBzaGFwZSA9IDIxKSArCiAgZ2VvbV9wb2ludChhZXMoeD1geWVhcmAsIHk9YGFsbF9tZWFuYCksIHNpemUgPSAyLjUpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0IFxud29tZW4iLCBhZXMoeD1geWVhcmAsIHk9IGB3b21lbl9tZWFuYCksIAogICAgICAgICAgICAgY29sb3IgPSAicHVycGxlNCIsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoeCA9IDAsIHkgPSAwLjAyMykpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0XG5vdGhlciB0b3BpY3MiLCBhZXMoeD1geWVhcmAsIHk9IGBhbGxfbWVhbmApLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSh4ID0gMCwgeSA9IDAuMDE3MykpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYsIDIwMTgsIDIwMjApKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIiIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIikpKwogIHRyYW5zaXRpb25fcmV2ZWFsKHllYXIpCgphbmltX3NhdmUoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiLAogICAgICAgICAgYW5pbWF0ZShwb2xhcml0eV90aW1lX2FuaW0sIGVuZF9wYXVzZSA9IDEwKSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZmlnLmFsdD0iQW4gYW5pbWF0ZWQgbGluZSBncmFwaCB0aGF0IHNob3dzIHRoZSBiaWFzIG92ZXIgdGltZSBmb3IgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFuZCBoZWFkbGluZXMgYWJvdXQgb3RoZXIgdG9waWNzLiBUaGUgYmlhcyBmb3IgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGhhcyBjb25zaXN0ZW50bHkgYmVlbiBoaWdoZXIuIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiKQpgYGAKCiMjIyBQb2xhcml0eSBvZiBOZXdzIFNpdGVzClxuCiMjIyMjIEluIHRoZSBncmFwaCBiZWxvdywgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGF2ZXJhZ2UgcG9sYXJpdHkgc2NvcmUgYmV0d2VlbiBoZWFkbGluZXMgYWJvdXQgd29tZW4gYW5kIG90aGVyIGhlYWRsaW5lcyBhcmUgc2hvd24gZm9yIGVhY2ggc2l0ZS4gVGhlIHNpdGVzIGFyZSBvcmRlcmVkIGJ5IHRoZSBsYXJnZXN0IGF2ZXJhZ2UgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGFib3V0IHdvbWVuLiBBbG1vc3QgZXZlcnkgc2l0ZSdzIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhcmUgbW9yZSBwb2xhcml6aW5nIHRoYW4gdGhlaXIgaGVhZGxpbmVzIGFib3V0IG90aGVyIHRvcGljcy4gClxuCgpgYGB7ciwgZmlnLmhlaWdodD0gMjQsIGZpZy53aWR0aD0gOCwgZWNobz1GQUxTRSwgZmlnLmFsdD0iQSBjaGFydCB0aGF0IHNob3dzIHRoZSBkaWZmZXJlbmNlIGluIHBvbGFyaXR5IGZvciBhbGwgbmV3cyBzaXRlcyB0aGF0IGRhdGEgd2FzIHRha2VuIGZyb20uIE1vc3Qgb2YgdGhlIHNpdGVzIGhhdmUgYSBoaWdoZXIgcG9sYXJpdHkgaW4gcmVnYXJkcyB0byBoZWFkbGluZXMgYWJvdXQgd29tZW4gY29tcGFyZWQgdG8gaGVhZGxpbmVzIGFib3V0IG90aGVyIHRvcGljcy4gVGhlIGRhaWx5IHN1biBoYXMgYnkgZmFyIHRoZSBsYXJnZXN0IGRpZmZlcmVuY2UgaW4gcG9sYXJpdHkgb2YgaXRzIGhlYWRsaW5lcy4ifQpwb2xhcml0eV9zaXRlICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX3NlZ21lbnQoYWVzKHg9cG9sYXJpdHlfYmFzZSwgeGVuZD1wb2xhcml0eV93b21lbiwgeT1mY3RfcmVvcmRlcihzaXRlLCBwb2xhcml0eV93b21lbiksIHllbmQ9c2l0ZSksIHNpemUgPSAxKSsKICBnZW9tX3BvaW50KGFlcyh4PXBvbGFyaXR5X2Jhc2UsIHkgPSBzaXRlKSwgc2l6ZSA9IDIpKwogIGdlb21fcG9pbnQoYWVzKHg9cG9sYXJpdHlfd29tZW4sIHkgPSBzaXRlKSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIiNjMWEwZmEiLCAKICAgICAgICAgICAgIHNpemUgPSAzLCBzdHJva2UgPSAxLCBzaGFwZSA9IDIxKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIlBvbGFyaXR5IikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSkrCiAgYW5ub3RhdGUoImxhYmVsIiwgeCA9IC4xLCB5ID0gMTc2LCBsYWJlbCA9ICJBdmVyYWdlIFBvbGFyaXR5IG9mIFxuIEhlYWRsaW5lcyBBYm91dCBXb21lbiIsIGNvbG9yID0gIm1lZGl1bXB1cnBsZTIiKSsKICBhbm5vdGF0ZSgibGFiZWwiLCB4ID0gLjEsIHkgPSAxNzIsIGxhYmVsID0gIkF2ZXJhZ2UgUG9sYXJpdHkgb2YgXG4gR2VuZXJhbCBIZWFkbGluZXMiKSsKICBsYWJzKHRpdGxlID0gIiIpCmBgYAoKKioqCgojIyBIZWFkbGluZSBFeGFtcGxlcwpcbgojIyMjIEJlbG93IHdlIHNob3cgYSBmZXcgbW9yZSBleGFtcGxlcyBvZiBoZWFkbGluZXMgYWxvbmcgd2l0aCB0aGVpciBzaXRlLCBjb3VudHJ5IGFuZCBiaWFzIHNjb3JlLiBUaGUgZmlyc3QgdGFibGUgc2hvd3MgYSBzdWJzZXQgb2YgdGhlIGxlYXN0IGJpYXNlZCBoZWFkbGluZXMgYWJvdXQgd29tZW4sIGFuZCB0aGUgc2Vjb25kIHRhYmxlIHNob3cgYSBmZXcgb2YgdGhlIG1vc3QgYmlhc2VkIGhlYWRsaW5lcy4gCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuYWx0PSJBIHRhYmxlIHdpdGggdGhyZWUgZXhhbXBsZXMgb2YgaGVhZGxpbmVzIHdpdGggdmVyeSBsb3cgYmlhcyBzY29yZXMuIn0KbGFzdF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCwKICAgICAgICAgIkJpYXMiID0gYGJpYXNgKSAlPiUKICBhcnJhbmdlKGBCaWFzYCkgJT4lCiAgZGlzdGluY3QoU2l0ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIHNsaWNlKDE6MykgJT4lIAogIHNlbGVjdChgSGVhZGxpbmVgLCBgU2l0ZWAsIGBDb3VudHJ5YCwgYEJpYXNgKQoKbGFzdF90aHJlZV9oZWFkbGluZXNfdGFibGUgPC0gZ3QobGFzdF90aHJlZV9oZWFkbGluZXMpICU+JSAKICB0YWJfaGVhZGVyKHRpdGxlID0gIkxlYXN0IEJpYXNlZCBIZWFkbGluZSBFeGFtcGxlcyIpICMlPiUgCiAgI3RhYl9zdHlsZShzdHlsZSA9IGNlbGxfdGV4dChjb2xvciA9ICJtZWRpdW1wdXJwbGUyIiksCiAgICAgICAgICAgIyBsb2NhdGlvbnMgPSBjZWxsc19jb2x1bW5fbGFiZWxzKCkpCgpsYXN0X3RocmVlX2hlYWRsaW5lc190YWJsZQpgYGAKClxuClxuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmFsdD0iQSB0YWJsZSB3aXRoIHRocmVlIGV4YW1wbGVzIG9mIGhpZ2hseSBiaWFzZWQgaGVhZGxpbmVzLiJ9CnRvcF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCkgJT4lIAogIGZpbHRlcihTaXRlICE9ICJkYWlseW1haWwuY28udWsiKSAlPiUgCiAgbXV0YXRlKEJpYXMgPSByb3VuZChiaWFzLCBkaWdpdHMgPSAzKSkgJT4lIAogIGFycmFuZ2UoZGVzYyhgQmlhc2ApKSAlPiUKICBkaXN0aW5jdChTaXRlLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUgCiAgc2xpY2UoMTozKSAlPiUgCiAgc2VsZWN0KGBIZWFkbGluZWAsIGBTaXRlYCwgYENvdW50cnlgLCBgQmlhc2ApCgp0b3BfdGhyZWVfaGVhZGxpbmVzX3RhYmxlIDwtIGd0KHRvcF90aHJlZV9oZWFkbGluZXMpICU+JSAKICB0YWJfaGVhZGVyKHRpdGxlID0gIk1vc3QgQmlhc2VkIEhlYWRsaW5lIEV4YW1wbGVzIikgIyU+JSAKICAjdGFiX3N0eWxlKHN0eWxlID0gY2VsbF90ZXh0KGNvbG9yID0gInB1cnBsZTQiKSwKICAgICAgICAgICAgI2xvY2F0aW9ucyA9IGNlbGxzX2JvZHkoKSkKCnRvcF90aHJlZV9oZWFkbGluZXNfdGFibGUKYGBgClxuCioqKgoKIyMgTW9yZSBJbmZvcm1hdGlvbiBBYm91dCB0aGUgRGF0YSAKXG4KIyMjIERhdGEgQ2FsY3VsYXRpb25zClxuCgojIyMjIFBvbGFyaXR5IENhbGN1bGF0aW9uczogVGhlIFB1ZGRpbmcgbWVhc3VyZWQgcG9sYXJpdHkgYnkgdXNpbmcgYSBwYWNrYWdlIGluIHB5dGhvbiB3aGljaCBtZWFzdXJlZCB0aGUgc2VudGltZW50IChuZWdhdGl2ZSB0byBwb3NpdGl2ZSkgb2YgZWFjaCBoZWFkbGluZSAoYSBzY29yZSBmcm9tIC0xIHRvIDEpLiBUaGUgcG9sYXJpdHkgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZXNlIHNjb3Jlcy4gCgojIyMjIEJpYXMgQ2FsY3VsYXRpb25zOiBUaGUgUHVkZGluZyBtZWFzdXJlZCBnZW5kZXIgYmlhcyBpbiB0d28gc3RlcHMuIEZpcnN0LCB0aGV5IGNoZWNrZWQgaWYgdGhlIGhlYWRsaW5lIHVzZWQgZ2VuZGVyZWQgbGFuZ3VhZ2UgKCdzaGUnLCAnYnJpZGUnLCAnZGF1Z2h0ZXInLCAuLi4pLiBJZiBpdCBkaWQsIHRoZXkgY291bnRlZCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRoYXQgYXJlIHN0ZXJlb3R5cGVzIGFib3V0IHdvbWVuICgnd2VhaycsICdzZXh5JywgJ2Vtb3Rpb25hbCcsIC4uLikuIFRoZW4sIHRoZXkgbm9ybWFsaXplZCB0aGlzIGNvdW50IHNvIGVhY2ggc2l0ZSBoYWQgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuIAoKIyMjIERhdGEgU291cmNlXG4KaHR0cHM6Ly9naXRodWIuY29tL3RoZS1wdWRkaW5nL2RhdGEvdHJlZS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzCgoKIyMjIE9yaWdpbmFsIEFydGljbGVcbgpodHRwczovL3B1ZGRpbmcuY29vbC8yMDIyLzAyL3dvbWVuLWluLWhlYWRsaW5lcy8KCgo=